package demo1;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: wx
 * Date: 2024-05-03
 * Time: 18:33
 */
public class HashBuck2 <K,V>{

    static class Node<K,V> {
        public K key;
        public V val;
        public Node<K,V> next;
        public Node(K key,V val) {
            this.key = key;
            this.val = val;
        }
    }

    public Node<K,V>[] array;
    public int usedSize;
    public static final float DEFAULT_LOAD_FACTOR= 0.75f;

    public HashBuck2() {
        array = (Node<K,V>[])new Node[10];
    }

    public void put(K key,V val) {
        int hash = key.hashCode();
        int index = hash % array.length;

        //遍历index下标的链表 是否存在 key 存在就更新value 不存在 进行头插法 插入数据
        Node<K,V> cur = array[index];
        while(cur != null) {
            if (cur.key == key) {
                cur.val = val;
            }
            cur = cur.next;
        }

        Node<K,V> node = new Node(key,val);
        node.next = array[index];
        array[index] = node;
        usedSize++;//8

    }

    public V getVal(K key){
        int hash = key.hashCode();
        int index = hash % array.length;

        Node<K,V> cur = array[index];
        while(cur != null) {
            if (cur.key.equals(key)) {//引用类型需要使用equals
                return cur.val;
            }
            cur = cur.next;
        }
        return null;
    }
    /*
     hashCode 和 equals 的区别是什么?
     举个栗子:
     查字典
        美丽
      --->
      1.美 hashCode
      2.美女 美景 美食 美丽 美X (一个词语 一个词语比较的时候,就有点类似于 equals)
      写自定义对象,最好自己实现一下 equals 和 hashCode
      拓展: 建议将toString也写一下
    */



}
